home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
misc
/
emu
/
QDOS2.lha
/
QLsource
/
ROMsrc
/
SYS
/
BASIC3_asm
< prev
next >
Wrap
Text File
|
1992-08-20
|
3KB
|
95 lines
*/beginfile BASIC3_asm
; --------------------------------------------------------------
; BASIC3_asm - BASIC bits
; - last modified 10/12/91
; QDOS-Amiga sources by Rainer Kowallik
; ...some changes by Mark J Swift
; --------------------------------------------------------------
L06DA2:
LEA BASIC_KEys(PC),A1
; Vectored utility BP_INIT
; A1=pointer to definition list
BP_INIT:
MOVEM.L D1-D2/D5-D7/A0/A2-A3,-(A7)
MOVEQ #8,D6 ; identifier for machinecode
; procedure
L06DAC:
MOVEQ #0,D7
MOVEQ #0,D5
MOVE.W (A1)+,D5 ; get number of procedures
LSL.L #3,D5 ; * 8 since we have two long
; word pointers
MOVE.L D5,D1
MOVE.L A1,-(A7)
JSR L04E60(PC) ;*/undomodify BSR L04E60
; allocate space for name
; table
MOVE.L D5,D1
;*/undoinsert LSL.L #1,D1
; assume names are 14 bytes
; long. !!!! NEW !!!!
JSR L04E72(PC) ;*/undomodify BSR L04E72
; allocate memory for name
; list
MOVEA.L (A7)+,A3 ; get pointer to procedure
; list -> A3 !!!
L06DC4:
MOVEA.L A3,A1 ; save pointer to procedure
; list for offset
MOVE.W (A3)+,D0 ; get address of procedure
BEQ.S L06E0C ; if end of procedure list
ADDA.W D0,A1 ; calculate absolute address
MOVE.L A1,-(A7)
MOVE.B (A3)+,D5 ; length of procedure name
MOVE.B D5,-(A7)
MOVE.B D6,-(A7)
MOVE.B D5,D1
MOVEA.L (A6),A1 ; get buffer base
L06DD8 MOVE.B (A3)+,0(A6,A1.L) ; copy name of procedure to
; buffer
ADDQ.W #1,A1
SUBQ.B #1,D1
BGT.S L06DD8 ; continue copy
MOVE.L A3,-(A7) ; save pointer to procedure
; list
MOVEA.L (A6),A3 ; aagain get buffer address
LEA TB_LIST(PC),A2
MOVEA.L (A2),A2
JSR L08622(PC) ;*/undomodify BSR L08622
; check name in Buffer and
; get address of name table
BRA.S L06E16 ; bad name return
MOVEA.L (A7)+,A3 ; restore pointer to
; procedure list
MOVE.B (A7)+,D6
MOVE.B (A7)+,D5 ; restore length of name
MOVE.L (A7)+,4(A6,A2.L) ; write Address of procedure
; to name table
MOVE.B D6,0(A6,A2.L) ; identifier procedure /
; function
MOVE.B D7,1(A6,A2.L) ; identifier string / float
; / int
BTST D7,D5 ; even number of bytes ?
BNE.S L06DC4 ; continue with next
; procedure
ADDQ.W #1,A3 ; make it even
BRA.S L06DC4 ; continue with next
; procedure
L06E0C SUBQ.W #8,D6 ; was it Procedure or
; function before ?
BNE.S L06E1C ; return if it was already
; for functions
MOVEQ #9,D6 ; if not, set function
; identifier now
MOVEA.L A3,A1
BRA.S L06DAC ; and continue linking in
; like procedure
L06E16 ADDA.W #12,A7 ; clean up stack for error
; return
MOVEQ #-12,D0 ; Bad name error
L06E1C MOVEM.L (A7)+,D1-D2/D5-D7/A0/A2-A3
RTS
; end of BP_INIT
; --------------------------------------------------------------
;*/endfile